# 安装 langchain-text-splitters 库（如果尚未安装）
# pip install -qU langchain-text-splitters

# 导入 Markdown 标题文本分割器
from langchain_text_splitters import MarkdownHeaderTextSplitter

# 定义一个示例的 Markdown 文档
# 这个文档包含多个级别的标题和对应的内容
markdown_document = """# Foo\n\n    ## Bar\n\nHi this is Jim\n\nHi this is Joe\n\n ### Boo \n\n Hi this is Lance \n\n ## Baz\n\n Hi this is Molly"""

# 打印原始 Markdown 文档以便对比
print("=== 原始 Markdown 文档 ===")
print(markdown_document)
print("\n" + "="*50 + "\n")

# 定义要分割的标题级别和对应的元数据名称
# 每个元组格式: (标题标记, 元数据字段名)
headers_to_split_on = [
    ("#", "Header 1"),      # 一级标题，在元数据中保存为 "Header 1"
    ("##", "Header 2"),     # 二级标题，在元数据中保存为 "Header 2"
    ("###", "Header 3"),    # 三级标题，在元数据中保存为 "Header 3"
]

# 创建 MarkdownHeaderTextSplitter 实例
# 这个分割器会根据指定的标题级别来分割文档
markdown_splitter = MarkdownHeaderTextSplitter(
    headers_to_split_on=headers_to_split_on
    # 可选参数：
    # strip_headers: 是否从内容中移除标题（默认为 True）
    # return_each_line: 是否每行返回一个文档（默认为 False）
)

# 使用分割器分割 Markdown 文档
# split_text 方法返回一个 Document 对象列表
md_header_splits = markdown_splitter.split_text(markdown_document)

# 打印分割结果
print("=== 分割结果 ===")
print(f"总共分割成 {len(md_header_splits)} 个文档块\n")

# 详细显示每个分割块的内容和元数据
for i, doc in enumerate(md_header_splits):
    print(f"--- 第 {i+1} 个文档块 ---")
    print("元数据 (metadata):", doc.metadata)
    print("内容 (page_content):", repr(doc.page_content))  # 使用 repr 显示原始格式
    print()